package com.xdb.engine.impl;

import java.util.List;

import com.xdb.engine.XDBEngine;
import com.xdb.logging.LogFactory;
import com.xdb.logging.Logger;
import com.xdb.presistence.XDBPresistence;
import com.xdb.presistence.table.XDBTableStore;
import com.xdb.presistence.view.XDBViewStore;
import com.xdb.sqlparser.ast.SQLStatement;
import com.xdb.sqlparser.ast.statement.SQLCreateTableStatement;
import com.xdb.sqlparser.ast.statement.SQLCreateViewStatement;
import com.xdb.sqlparser.dialect.sql1999.parser.SQL1999StatementParser;

/**
 * 数据引擎对SQL1999标准的支持
 * @author woate
 *
 */
public class XDBEngineOnSQL1999Impl implements XDBEngine{
	Logger logger;
	XDBPresistence presistence;
	
	public XDBEngineOnSQL1999Impl(XDBPresistence presistence) {
		LogFactory.setNOPLog();
		logger = LogFactory.getLog(XDBEngineOnSQL1999Impl.class);
		this.presistence = presistence;
	}

	@Override
	public void createTable(String sql) {
		SQLCreateTableStatement st = (SQLCreateTableStatement)parse(sql).get(0);
		String name = st.getTableSource().getExpr().toString();
		//TODO 将SQL语法抽象树转换为元信息
		logger.debug(sql);
		XDBTableStore tableStore = presistence.getXDBTableStore();
		tableStore.create(null);
	}

	@Override
	public void createView(String sql) {
		SQLCreateViewStatement st = (SQLCreateViewStatement)parse(sql).get(0);
		String name = st.getName().getSimpleName();
		logger.debug(sql);
		XDBViewStore viewStore = presistence.getXDBViewStore();
		viewStore.create(name, sql);
	}

	@Override
	public void createIndex(String sql) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void createSequence(String sql) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void createTrigger(String sql) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void createProcedure(String sql) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void createFunction(String sql) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void callProcedure(String name, String[] ins, String[] outs) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public String[] callFunction(String name, String[] ins) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String[] callFunction(String name, List<String> list) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public List<SQLStatement> parse(String sql) {
		SQL1999StatementParser parser = new SQL1999StatementParser(sql);
		return parser.parseStatementList();
	}

}
